# 功能码
function_code = {
    'read': 0X03,       # 读下位机功能码 0X03
    'check': 0X08,      # 检测功能码 0X08
    'addr_err': 0X10,   # 地址错误功能码 0X10
    'reset': 0X01       # 复位功能码 0X01
}

# 附加数据
extra_data = {
    'err_code': 0X6F,        # 错误码 0X6F
    'head': 0X5A,            # 包头 0X5A
    'broad_addr': 0X00,      # 广播地址 0X00
    'content': 0X13          # 自定义内容 0X13
}


# 获取前四位的和
def get_sum(data):
    sum = 0
    for i in range(4):
        sum += data[i]
    return sum


# 生成从机检测数据
def generate_check_data(address):
    # 生成发送的数据 数据包头+从机地址+检测功能码（Fun_CheckSlave）+自定义内容（Check_Content）+校验字节
    send_data = [extra_data['head'], address,
                 function_code['check'], extra_data['content'], 0X00]
    # 校验码
    send_data[4] = get_sum(send_data)
    return send_data


# 生成获取分数数据
def generate_read_data(address):
    # 生成发送的数据 数据包头+检测正常从机地址（0x00）+读下位机功能码（Fun_ReadInfo）+从机地址+校验字节
    send_data = [extra_data['head'], extra_data['broad_addr'],
                 function_code['read'], address, 0X00]
    # 校验码
    send_data[4] = get_sum(send_data)
    return send_data


# 生成复位数据
def generate_reset_data():
    # 生成发送的数据 数据包头+广播地址+复位功能码（Fun_Reset）+从机返回的分数值（0x00）+校验字节
    send_data = [extra_data['head'], extra_data['broad_addr'],
                 function_code['reset'], 0X00, 0X00]
    # 校验码
    send_data[4] = get_sum(send_data)
    return send_data
